package donkeykong;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JPanel;

/**
 * 
 * @author Antonio Cebollada, Miguel Castillo, José Ignacio Castro
 *
 */
public class Intermedio extends JPanel{

	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/** Imagen del intermedio entre niveles **/
	public Image imagenIntermedio;
	/** Stream de la musica que suena**/
	public AudioInputStream musica;
	/** Clip que permite iniciar o parar la musica, entre otras opciones **/
	public Clip clickClip;
	/** Thread que se utiliza para lanzar un codigo en segundo plano **/
	private Thread r;
	/** Timer que cada cierto tiempo, enviará un evento Action**/
	private int Nivel;
	private int VidasMario;
	private int NivelDificultad;
	
	private Puntuacion_total score ;
	
	/** Contructor que le entra el nivel de la pantalla que va a abrir,las vidas que le quedan al Mario,la dificultad del juego,y si es multijugador 
	 * @param pt **/
	public Intermedio(int nivel,int vidas, int dificultad, Puntuacion_total pt){		
		try {
			/** Segun el nivel que sea, se abrirá una imagen de intermedio distinta **/
			imagenIntermedio = ((nivel==1)?ImageIO.read(new File("./pantallas/intermedio.jpg"))
					:((nivel==2)?ImageIO.read(new File("./pantallas/intermedio_50.jpg"))
							:ImageIO.read(new File("./pantallas/intermedio_75.jpg"))));
			
			
			score = pt;
			VidasMario = vidas;
			Nivel = nivel;
		    NivelDificultad = dificultad;
			clickClip = AudioSystem.getClip();
			musica = AudioSystem.getAudioInputStream(new File("./sounds/howhigh.wav"));
			clickClip.open(musica);
			clickClip.loop(1);
			clickClip.start();
			repaint();
			/** Definir el runnable como una espera de 2.6 segundos para que suene la musica de intermedio, y luego ya comienze el nivel **/
			r = new Thread(new Runnable() {
				
				@Override
				public void run() {
					try {
						Thread.sleep(2600);
						ComenzarNivel();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
				}
			});
			
			r.start();


		} catch (IOException e) {
			e.printStackTrace();
		} catch (LineUnavailableException e) {
			e.printStackTrace();
		} catch (UnsupportedAudioFileException e) {
			e.printStackTrace();
		}
		
	}
	
	/** Funcion que se llama para comenzar un nivel **/
	public void ComenzarNivel(){
		/** Parar la musica de intermedio **/
		clickClip.stop();
		clickClip.close();
		repaint();
		/** Segun el nivel que sea, se abre la clase que contiene ese nivel. **/
		if(Nivel==1){
			PrimerNivel nv = new PrimerNivel(VidasMario,NivelDificultad,score);
			/** Mismo codigo para librar al procesador de carga inutil **/
			getParent().add(nv);
			/** Esta funcion sirve para inicializar correctamente el nivel, ponerla para cada nivel tambien **/
			nv.inicializar();
			nv.setVisible(true);
			setVisible(false);
			getParent().remove(this);
	        nv.requestFocusInWindow();
		}else if (Nivel==2){
			SegundoNivel nv2 = new SegundoNivel(VidasMario,NivelDificultad,score);
			getParent().add(nv2);
			/** Esta funcion sirve para inicializar correctamente el nivel, ponerla para cada nivel tambien **/
			nv2.inicializar();
			nv2.setVisible(true);
			setVisible(false);
			getParent().remove(this);
	        nv2.requestFocusInWindow();		
	    }else if (Nivel==3){
			UltimoNivel nv3 = new UltimoNivel(VidasMario,NivelDificultad,score);
			getParent().add(nv3);
			/** Esta funcion sirve para inicializar correctamente el nivel, ponerla para cada nivel tambien **/
			nv3.inicializar();
			nv3.setVisible(true);
			setVisible(false);
			getParent().remove(this);
	        nv3.requestFocusInWindow();

		}

	}
	
	/** Funcion paintComponent que es propia de los JPanels, que sirve para dibujar en el mismo la imagen que se quiera, entre otras opciones **/
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D) g;
		/** Pintar la imagen del intermedio, colocando la esquina superior izquierda en la posicion 0,0 **/
		g2d.drawImage(imagenIntermedio,0,0,null);
		g2d.dispose();

	}


	
	
	
	
	
	
	
	
	
	
	
}
